// 智能体管理页面端到端测试
describe('智能体管理', () => {
  beforeEach(() => {
    cy.login();
    cy.visit('/agents');
    cy.waitForLoading();
  });

  it('应该正确显示智能体列表', () => {
    // 验证页面标题
    cy.shouldHavePageTitle('智能体管理');
    
    // 验证表格显示
    cy.getTableRows().should('have.length.greaterThan', 0);
    
    // 验证搜索功能
    cy.searchInTable('智能体1');
    cy.shouldHaveTableRow('智能体1');
    
    // 验证刷新功能
    cy.refreshTable();
    cy.waitForLoading();
    cy.getTableRows().should('have.length.greaterThan', 0);
  });

  it('应该能够创建新的智能体', () => {
    // 点击创建按钮
    cy.get('[data-cy="create-agent-button"]').click();
    
    // 验证模态框显示
    cy.shouldHaveModal('创建智能体');
    
    // 填写表单
    const testData = cy.getTestData().agent;
    cy.fillForm({
      'name': testData.name,
      'description': testData.description,
      'systemPrompt': testData.systemPrompt,
      'modelConfigId': testData.modelConfigId,
      'isActive': testData.isActive,
    });
    
    // 提交表单
    cy.get('[data-cy="submit-button"]').click();
    
    // 验证成功消息
    cy.shouldHaveSuccessMessage('智能体创建成功');
    
    // 验证跳转到列表页
    cy.url().should('include', '/agents');
  });

  it('应该能够编辑智能体', () => {
    // 点击编辑按钮
    cy.clickTableActionButton(0, '编辑');
    
    // 验证模态框显示
    cy.shouldHaveModal('编辑智能体');
    
    // 修改表单
    cy.get('[data-cy="name-field"] input').clear().type('修改后的智能体名称');
    
    // 提交表单
    cy.get('[data-cy="submit-button"]').click();
    
    // 验证成功消息
    cy.shouldHaveSuccessMessage('智能体更新成功');
    
    // 验证修改后的数据显示
    cy.shouldHaveTableRow('修改后的智能体名称');
  });

  it('应该能够删除智能体', () => {
    // 点击删除按钮
    cy.clickTableActionButton(0, '删除');
    
    // 确认删除
    cy.confirmModal();
    
    // 验证成功消息
    cy.shouldHaveSuccessMessage('智能体删除成功');
    
    // 验证数据不再存在
    cy.shouldNotHaveTableRow('智能体1');
  });

  it('应该能够切换智能体状态', () => {
    // 点击状态切换按钮
    cy.clickTableActionButton(0, '启用');
    
    // 验证成功消息
    cy.shouldHaveSuccessMessage('智能体状态更新成功');
    
    // 验证状态已更改
    cy.getTableRows().first().should('contain', '运行中');
  });

  it('应该能够查看智能体详情', () => {
    // 点击详情按钮
    cy.clickTableActionButton(0, '详情');
    
    // 验证详情页面显示
    cy.shouldHavePageTitle('智能体详情');
    cy.get('[data-cy="agent-detail-name"]').should('be.visible');
    cy.get('[data-cy="agent-detail-description"]').should('be.visible');
    
    // 返回列表
    cy.get('[data-cy="back-button"]').click();
    cy.url().should('include', '/agents');
  });

  it('应该能够测试智能体对话', () => {
    // 点击测试按钮
    cy.clickTableActionButton(0, '测试');
    
    // 验证测试页面显示
    cy.shouldHavePageTitle('智能体测试');
    
    // 输入测试消息
    cy.get('[data-cy="test-input"]').type('你好，请介绍一下自己');
    
    // 发送消息
    cy.get('[data-cy="send-button"]').click();
    
    // 等待响应
    cy.waitForLoading();
    
    // 验证响应显示
    cy.get('[data-cy="response-area"]').should('be.visible');
  });

  it('应该能够导出智能体配置', () => {
    // 点击导出按钮
    cy.get('[data-cy="export-button"]').click();
    
    // 验证导出菜单显示
    cy.shouldHaveDropdown('[data-cy="export-menu"]', ['JSON', 'YAML', 'XML']);
    
    // 选择JSON格式
    cy.selectDropdownItem('[data-cy="export-menu"]', 'JSON');
    
    // 验证文件下载
    cy.readFile('cypress/downloads/agents.json').should('exist');
  });

  it('应该能够批量操作智能体', () => {
    // 选择多个智能体
    cy.get('[data-cy="select-all-checkbox"]').check();
    
    // 验证批量操作按钮显示
    cy.get('[data-cy="batch-actions"]').should('be.visible');
    
    // 批量启用
    cy.get('[data-cy="batch-enable"]').click();
    cy.confirmModal();
    cy.shouldHaveSuccessMessage('批量启用成功');
    
    // 批量删除
    cy.get('[data-cy="batch-delete"]').click();
    cy.confirmModal();
    cy.shouldHaveSuccessMessage('批量删除成功');
  });

  it('应该能够处理表单验证错误', () => {
    // 点击创建按钮
    cy.get('[data-cy="create-agent-button"]').click();
    
    // 直接提交空表单
    cy.get('[data-cy="submit-button"]').click();
    
    // 验证错误消息
    cy.shouldHaveFormError('[data-cy="name-field"]', '请输入智能体名称');
    cy.shouldHaveFormError('[data-cy="systemPrompt-field"]', '请输入系统提示词');
  });

  it('应该能够处理API错误', () => {
    // 模拟API错误
    cy.intercept('POST', '/api/agents', {
      statusCode: 500,
      body: { message: '服务器内部错误' }
    }).as('createAgentError');
    
    // 尝试创建智能体
    cy.get('[data-cy="create-agent-button"]').click();
    cy.fillForm(cy.getTestData().agent);
    cy.get('[data-cy="submit-button"]').click();
    
    // 验证错误消息
    cy.shouldHaveErrorMessage('服务器内部错误');
  });

  it('应该能够处理网络错误', () => {
    // 模拟网络错误
    cy.intercept('GET', '/api/agents', { forceNetworkError: true }).as('networkError');
    
    // 刷新页面
    cy.refreshTable();
    
    // 验证错误消息
    cy.shouldHaveErrorMessage('网络连接失败');
  });

  it('应该能够正确显示分页', () => {
    // 验证分页组件显示
    cy.get('.ant-pagination').should('be.visible');
    
    // 跳转到第二页
    cy.goToPage(2);
    
    // 验证页面跳转
    cy.url().should('include', 'page=2');
    
    // 验证数据加载
    cy.waitForLoading();
    cy.getTableRows().should('have.length.greaterThan', 0);
  });

  it('应该能够按不同字段排序', () => {
    // 按名称排序
    cy.get('[data-cy="sort-name"]').click();
    cy.waitForLoading();
    
    // 验证排序结果
    cy.get('[data-cy="sort-name"]').should('have.class', 'ant-table-column-sort');
    
    // 按创建时间排序
    cy.get('[data-cy="sort-created"]').click();
    cy.waitForLoading();
    
    // 验证排序结果
    cy.get('[data-cy="sort-created"]').should('have.class', 'ant-table-column-sort');
  });

  it('应该能够使用高级搜索', () => {
    // 打开高级搜索
    cy.get('[data-cy="advanced-search"]').click();
    
    // 设置搜索条件
    cy.fillForm({
      'name': '测试',
      'status': 'Running',
      'isActive': true,
    });
    
    // 执行搜索
    cy.get('[data-cy="search-button"]').click();
    
    // 验证搜索结果
    cy.waitForLoading();
    cy.getTableRows().should('have.length.greaterThan', 0);
  });

  it('应该能够保存和加载搜索条件', () => {
    // 设置搜索条件
    cy.searchInTable('测试');
    
    // 保存搜索条件
    cy.get('[data-cy="save-search"]').click();
    cy.get('[data-cy="search-name"]').type('我的搜索');
    cy.get('[data-cy="save-button"]').click();
    
    // 验证保存成功
    cy.shouldHaveSuccessMessage('搜索条件保存成功');
    
    // 加载保存的搜索条件
    cy.get('[data-cy="saved-searches"]').click();
    cy.get('[data-cy="saved-search"]').contains('我的搜索').click();
    
    // 验证搜索条件应用
    cy.get('[data-cy="search-input"]').should('have.value', '测试');
  });
});